package controller.pub;

import controller.MyCoolServlet;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.servlet.*;
import javax.servlet.http.*;
import model.Product;
import model.Sale;
import model.User;
import persistence.product.ProductDAO;
import persistence.product.ProductPersistFactory;
import persistence.sale.SaleDAO;
import persistence.sale.SalePersistFactory;

public class ConfirmCarritoServlet extends MyCoolServlet {

    @Override
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        HttpSession s = request.getSession();
        String datosVenta = request.getParameter("datosVenta");
        User u = (User) s.getAttribute("usuario");
        if (( u == null || u.getUsuario() == null) && (datosVenta==null || !datosVenta.equals("added")))
            gotoURL(confirmCarritoForm, request, response);
        else{
            Sale venta = new Sale();
            if (datosVenta==null || !datosVenta.equals("added")){
                venta.setDireccion(u.getDireccion());
                venta.setPago(u.getPago());
                venta.setUsuario(u.getUsuario());
            }else{
                venta.setDireccion(request.getParameter("direccion"));
                venta.setPago(request.getParameter("pago"));
                venta.setUsuario(request.getParameter("nombre"));
            }
            venta.setFecha(getFechaActual());
            Map<String, Sale> saleMap = new HashMap <String,Sale>();

            SaleDAO persistenceManagerSale = SalePersistFactory.getSaleDAO(persistenceMechanism);
            ProductDAO persistenceManagerProduct = ProductPersistFactory.getProductDAO(persistenceMechanism);
            Map<String, Product> productMap = (HashMap) s.getAttribute("carrito");
            for(Product product: productMap.values()){
                venta.setProductos(product.getId());
                venta.setImporte(product.getPrecio());
                venta.setId(venta.getUsuario()+"_"+product.getId()+"_"+getHoraActual());
                product.setVentas(product.getVentas()+1);
                if(!persistenceManagerSale.createSale(venta)){
                    request.setAttribute("message1", "Error al procesar su compra:");
                    request.setAttribute("message2", "Vuelva a intentar comprar con posterioridad");
                    gotoURL(errorForm, request, response);
                }
                saleMap.put(venta.getId(), venta);
                if(!persistenceManagerProduct.updateProduct(product.getId(), product)){
                    request.setAttribute("message1", "Error al actualizar app:");
                    request.setAttribute("message2", "Vuelva a intentarlo con posterioridad");
                    gotoURL(errorForm, request, response);
                }
                productMap.remove(product.getId());
            }
            s.setAttribute("carrito", productMap);
            Iterator itr = saleMap.entrySet().iterator();
            request.setAttribute("ventas", itr);
            gotoURL(successVentaForm, request, response);
        }
    }

    private static String getFechaActual() {
        Date ahora = new Date();
        SimpleDateFormat formateador = new SimpleDateFormat("dd-MM-yyyy");
        return formateador.format(ahora);
    }

    public static String getHoraActual() {
        Date ahora = new Date();
        SimpleDateFormat formateador = new SimpleDateFormat("hh:mm:ss");
        return formateador.format(ahora);
    }
}